Shiro开启Cache后无法进行不同用户的realm信息缓存

7,149次阅读
16 条评论

共计 634 个字符,预计需要花费 2 分钟才能阅读完成。

前言

目前博主手上有在写一个权限方面的项目(watchdog-framework),项目基于 Shiro 进行了权限验证,不过开启了 Cache 之后,不同的用户登录之后其权限都和第一个登录者缓存的权限一样,这样肯定是行不通的,无法达到权限的期望效果,于是就开启了一番探索之旅。
Shiro 开启 Cache 后无法进行不同用户的 realm 信息缓存

正文

首先第一个想到的就是缓存的原因,因为我使用了 Redis 缓存,所以直接在管理工具里面查看,发现不管登录多少个用户,用户 realm 信息缓存都只是会缓存一条,在 ShiroConfig 中每个 Bean 都检查了一遍,也没有找到原因,最终把问题源头锁定在自定义的 MyRealm 中,然后在重写的 doGetAuthenticationInfo 方法中打了断点,发现在执行后返回的 SimpleAuthenticationInfo 对象中的第三个参数的值,即为 realmName,其值和 redis 里面缓存的唯一一条realm 的名称一样,看到这里貌似找到了问题的真正所在之处,于是就将返回语句中的 realmName 参数值变成如下的格式:

String name = Encrypt.md5(user.getId()+user.getUsername());
return new SimpleAuthenticationInfo(user,user.getPassword(),name);

然后再执行一次登录操作,果然达到期望的目标了:
Shiro 开启 Cache 后无法进行不同用户的 realm 信息缓存

后记

在遇到问题只有通过不断的分析调试,才可以找到最终的问题的所在之处,愿世上没有解决不了的 BUG!!!

沛霖主页

共计5人点赞,其中1人来自小程序

正文完
使用官方微信小程序体验更多功能
post-qrcode
 5
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 于2018-04-25发表,共计634字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(16 条评论)
sunshine 评论达人 LV.1
2018-07-06 09:11:18 回复

大佬,问个问题,我用你的方法试了,完全没问题,但是实际情况是这样的,这里的不同用户在登陆时候,用的都是同一个浏览器,如果同一个浏览器进行登陆后,后面登陆的用户会把前面登陆的用户的权限给覆盖掉,请问该怎么处理?同一个浏览器下登陆不同的用户,cookie是一样的..

 Windows  Firefox  中国浙江省杭州市电信
    憧憬Licoy 博主
    2018-07-06 09:13:16 回复

    @sunshine 你这个问题就存在一些问题,既然上个用户已经登出,为什么还要在浏览器端保存上个用户的相关身份信息在浏览器端呢?

     Windows  Chrome
      sunshine 评论达人 LV.1
      2018-07-06 09:25:41 回复

      @憧憬Licoy 几个用户同时在线,同时用同一个浏览器,只是用不同的页签,且没有登出用户,这样会有权限冲突..

       Windows  Firefox  中国浙江省杭州市电信
        憧憬Licoy 博主
        2018-07-06 09:27:14 回复

        @sunshine 第一次见到你这种需求,抱歉没针对这种情况作出开发。

         Windows  Chrome
sunshine 评论达人 LV.1
2018-07-05 09:19:27 回复

谢谢,用处大大滴

 Windows  Firefox  中国浙江省杭州市电信
sunshine 评论达人 LV.1
2018-07-05 09:18:36 回复

谢谢楼主坑了一个月的问题总算找到a答案了

 Windows  Firefox  中国浙江省杭州市电信
haoessays 评论达人 LV.1
2018-06-01 22:40:26 回复

收藏了,赞赞

 Windows  Firefox  伊朗
皮皮虾 评论达人 LV.1
2018-05-03 01:46:41 回复

请问您文章下面的赞和打赏的是用的插件还是自己写的,以及您网站没有登陆,文章发表吗

 iPhone  Safari  中国山东省枣庄市联通
    憧憬Licoy 博主
    2018-05-03 08:51:00 回复

    @皮皮虾 是使用的张戈博主分享的文章弄得,因属于个人博客,网站没有开放登录。

     Windows  Chrome
网站建设 评论达人 LV.2
2018-05-02 11:19:48 回复

喜欢这句“没有解决不了的BUG”

 Windows  Chrome  中国广东省广州市电信
周松松博客 评论达人 LV.1
2018-04-28 15:40:28 回复

此文很实用!

 Android  Chrome  中国湖北省十堰市电信